home *** CD-ROM | disk | FTP | other *** search
- unit uGlobal;
-
- {
- *******************************************************************************
- * Descriptions: Global
- * $Source: /cvsroot/fma/fma/uGlobal.pas,v $
- * $Locker: $
- *
- * Todo:
- *
- * Change Log:
- * $Log: uGlobal.pas,v $
- * Revision 1.11.6.1 2004/09/10 12:14:15 z_stoichev
- * - Handle GetFirstToken with empty str.
- *
- * Revision 1.12 2004/09/10 11:49:05 z_stoichev
- * handle GetTocken from empty string
- *
- * Revision 1.11 2004/07/02 08:14:01 z_stoichev
- * - Added Sound events for Proximity Away/Near.
- *
- * Revision 1.10 2004/06/22 14:33:52 z_stoichev
- * - Added GetToken double-quotes support.
- *
- * Revision 1.9 2004/06/15 13:02:59 z_stoichev
- * Fixed registry entries.
- *
- * Revision 1.8 2004/06/14 09:33:48 z_stoichev
- * Fixed '' not integer value.
- *
- * Revision 1.7 2004/05/19 18:34:15 z_stoichev
- * Build 0.1.0.35c
- *
- * Revision 1.6 2003/12/04 16:30:43 z_stoichev
- * Fixed memory leak,
- * Added new function GetTokenCount.
- *
- * Revision 1.5 2003/11/28 09:38:07 z_stoichev
- * Merged with branch-release-1-1 (Fma 0.10.28c)
- *
- * Revision 1.4.2.2 2003/11/27 12:56:10 z_stoichev
- * Add sent message sound.
- *
- * Revision 1.4.2.1 2003/10/27 07:22:54 z_stoichev
- * Build 0.1.0 RC1 Initial Checkin.
- *
- * Revision 1.4 2003/07/02 12:40:30 crino77
- * added call sound
- *
- * Revision 1.3 2003/01/30 04:15:57 warren00
- * Updated with header comments
- *
- *
- *******************************************************************************
- }
-
- interface
-
- function WideQuoteStr(str: WideString): WideString;
-
- function GetFirstToken(var str: WideString; delimiter: char = ','): WideString;
-
- { Returns now many tokens are in the string, 1..n, if str is empty returns 0 }
- function GetTokenCount(str: String): Integer;
- { Extracts token number 0..n-1 from str, where n is taken from GetTokenCount }
- function GetToken(str: String; index: Integer): String;
-
- procedure InitRegistry;
-
- implementation
-
- uses Classes, Registry, SysUtils;
-
- function WideQuoteStr(str: WideString): WideString;
- var
- Quote: boolean;
- i: integer;
- begin
- Quote := False;
- str := StringReplace(str, '"', '""', [rfReplaceAll]);
- for i := 1 to Length(str) do
- if (str[i] = ' ') or (str[i] = '"') then begin
- Quote := True;
- break;
- end;
- if Quote then
- str := '"' + str + '"';
- Result := str;
- end;
-
- function GetFirstToken(var str: WideString; delimiter: char = ','): WideString;
- var
- i,j,k,q: integer;
- s,d: WideString;
- begin
- { Left trim text }
- j := Length(str);
- if j = 0 then begin
- Result := '';
- exit;
- end;
- i := 1;
- while (i < j) and (str[i] = ' ') do inc(i);
- { Extract first token }
- if str[i] = '"' then begin
- { token IS quoted }
- s := Copy(str,i+1,j);
- k := Length(s);
- j := 1; d := ''; q := 0;
- while (j <= k) do begin
- if s[j] = '"' then begin
- inc(q);
- { check for double-quotes }
- if q = 2 then begin
- q := 0;
- inc(j);
- continue; // ignore second quote
- end;
- end
- else
- if q = 1 then
- break // single quote found, so exit loop
- else
- q := 0;
- d := d + s[j];
- inc(j);
- end;
- if q = 1 then begin // remove last single quote
- dec(j);
- Delete(d,Length(d),1);
- end;
- if j <= k then
- s := d
- else
- Abort; // not possible if text is correctly quoted!
- Delete(str,1,i+j);
- { Clear text up to next delimiter }
- i := Pos(delimiter,str);
- if i = 0 then i := Length(str);
- Delete(str,1,i);
- end
- else begin
- { token is NOT quoted }
- s := Copy(str,i,j);
- j := Pos(delimiter,s);
- if j = 0 then j := Length(s)+1;
- s := Trim(Copy(s,1,j-1));
- { Update source }
- Delete(str,1,i+j-1);
- end;
- Result := s;
- end;
-
- function GetToken(str: String; index: Integer): String;
- var
- //sl: TStrings;
- s,d: WideString;
- begin
- Result := '';
- {
- try
- sl := TStringList.Create;
- try
- sl.DelimitedText := str;
- Result := sl.Strings[index];
- finally
- sl.Free;
- end;
- except
- end;
- }
- s := str;
- while Trim(s) <> '' do begin
- d := GetFirstToken(s);
- if index = 0 then begin
- Result := d;
- break;
- end;
- Dec(index);
- end;
- end;
-
- function GetTokenCount(str: String): Integer;
- var
- //sl: TStrings;
- s: WideString;
- begin
- Result := 0;
- {
- try
- sl := TStringList.Create;
- try
- sl.DelimitedText := str;
- Result := sl.Count;
- finally
- sl.Free;
- end;
- except
- end;
- }
- s := str;
- while Trim(s) <> '' do begin
- Inc(Result);
- GetFirstToken(s);
- end;
- end;
-
- procedure InitRegistry;
- var
- reg: TRegistry;
- begin
- reg := TRegistry.Create;
- try
- reg.OpenKey('\AppEvents\EventLabels\FMA_SMSReceived', True);
- reg.WriteString('', 'SMS Received');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_SMSSent', True);
- reg.WriteString('', 'SMS Sent');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_Calling', True);
- reg.WriteString('', 'Calling Contact');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_CallReceived', True);
- reg.WriteString('', 'Call Received');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_MEConnected', True);
- reg.WriteString('', 'Connected to Mobile Equipment');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_MEDisconnected', True);
- reg.WriteString('', 'Disconnected from Mobile Equipment');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_Away', True);
- reg.WriteString('', 'Proximity Away');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\EventLabels\FMA_Near', True);
- reg.WriteString('', 'Proximity Near');
- reg.CloseKey;
-
- reg.OpenKey('\AppEvents\Schemes\Apps\MobileAgent', True);
- reg.WriteString('', 'floAt''s Mobile Agent');
- reg.CloseKey;
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_Calling');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_CallReceived');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_SMSReceived');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_SMSSent');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_Away');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_Near');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_MEConnected');
- reg.CreateKey('\AppEvents\Schemes\Apps\MobileAgent\FMA_MEDisconnected');
- finally
- reg.Free;
- end;
- end;
-
- {
- var
- w: WideString;
-
- initialization
- w := '"a=""b"""'; // a="b"
- GetFirstToken(w);
- }
- end.
-